﻿using System.Collections.Generic;
using Wedn.DAL;
using Wedn.Model.Data;

namespace Wedn.BLL.Data
{
    /// <summary>
    /// 选项管理抽象类不可被实例化(初步审核通过)
    /// </summary>
    public abstract class OptionsManager
    {
        #region 公共方法

        #region GetTitle
        /// <summary>
        /// 获取网站title
        /// </summary>
        /// <returns>网站title</returns>
        public static string GetTitle()
        {
            return GetValue("title") + " | " + GetValue("subtitle");
        }
        #endregion

        #endregion

        #region 增加选项

        #region Insert Option
        /// <summary>
        /// 向选项设置表中插入一行数据
        /// </summary>
        /// <param name="option">要插入的对象</param>
        /// <returns>存储过程是否成功</returns>
        public static bool Insert(Option option)
        {
            return OptionsDAO.Insert(option) > 0 ? true : false;
        }
        #endregion

        #region InsertNameValue
        /// <summary>
        /// 向选项设置表中插入一行数据
        /// </summary>
        /// <param name="name">要插入的选项名称</param>
        /// <param name="value">要插入的选项值</param>
        /// <returns>存储过程是否成功</returns>
        public static bool InsertNameValue(string name, string value)
        {
            Option option = new Option(name, value);
            return OptionsDAO.Insert(option) > 0 ? true : false;
        }
        #endregion

        #endregion

        #region 删除选项
        /// <summary>
        /// 根据id删除对应的选项记录
        /// </summary>
        /// <param name="optionid">要删除记录的ID</param>
        /// <returns>受影响行数</returns>
        public static bool Delete(int optionid)
        {
            return OptionsDAO.Delete(optionid) > 0 ? true : false;
        }
        #endregion

        #region 更新选项

        #region UpdateValueByName
        /// <summary>
        /// 根据选项名称更新对应的选项值
        /// </summary>
        /// <param name="name">要修改的选项名称</param>
        /// <param name="value">要更新的值</param>
        /// <returns>是否更新成功</returns>
        public static bool UpdateValueByName(string name, string value)
        {
            return OptionsDAO.UpdateValueByName(name, value) > 0 ? true : false;
        }
        #endregion

        #region Update Option
        /// <summary>
        /// 更新一个选项对象
        /// </summary>
        /// <param name="option">要更新的对象</param>
        /// <returns>是否更新成功</returns>
        public static bool Update(Option option)
        {
            return OptionsDAO.Update(option) > 0 ? true : false;
        }
        #endregion

        #endregion

        #region 选择选项

        #region 获取表中主键最大值
        /// <summary>
        /// 获取表中主键最大值
        /// </summary>
        /// <returns>主键最大值</returns>
        public static int GetMaxId()
        {
            return OptionsDAO.GetMaxId();
        }
        #endregion

        #region 获取全部设置
        /// <summary>
        /// 取出所有选项设置信息
        /// </summary>
        /// <returns>包涵所有设置信息的数据集合</returns>
        public static List<Option> GetOptions()
        {
            return OptionsDAO.SelectOptions();
        }
        #endregion

        #region 根据选项名称获取设置值
        /// <summary>
        /// 通过数据表中的选项名称获取对应设置的值
        /// </summary>
        /// <param name="name">选项名称</param>
        /// <returns>对应的选项值</returns>
        public static object GetValue(string name)
        {
            return OptionsDAO.SelectValue(name);
        }
        /// <summary>
        /// 通过数据表中的选项名称获取对应设置的值, 返回对应选项值, 没有该选项则返回空字符串;
        /// </summary>
        /// <param name="name">选项名称</param>
        /// <returns>对应的选项值</returns>
        public static string GetSetting(string name)
        {
            object obj = OptionsDAO.SelectValue(name);
            return object.ReferenceEquals(obj, null) ? string.Empty : obj.ToString();
        }
        #endregion

        #region 根据ID取一个选项对象
        /// <summary>
        /// 根据ID取一个选项对象
        /// </summary>
        /// <param name="optionid">选项ID</param>
        /// <returns>选项对象</returns>
        public static Option GetOption(int optionid)
        {
            return OptionsDAO.SelectOption(optionid);
        }
        #endregion

        #endregion
    }
}
